/**
 * 对应接口文档地址 http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html
 */
package com.viewhigh.wechat.sdk.api;

import org.apache.commons.lang.StringUtils;
import org.sword.lang.HttpUtils;

import com.alibaba.fastjson.JSONObject;
import com.viewhigh.framework.common.log.LogUtils;
import com.viewhigh.wechat.sdk.base.BaseApi;
import com.viewhigh.wechat.sdk.menu.Menu;

/**
 * 
 * @ClassName: TemplateMsg
 * @Description: 菜单API
 * @author liusongqing
 * @date 2016年9月23日 下午11:08:44
 *
 */
public class MenuApi extends BaseApi {
    // 菜单创建（POST） 限100（次/天）
    public static String menu_create_url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=";
    // 自定义菜单查询
    public static String menu_get_url = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=";
    // 自定义菜单删除
    public static String menu_delete_url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=";

    public static Boolean deleteMenu(String appId) {
        LogUtils.error("进入sdk，删除自定义菜单，参数appId为:" + appId);
        // 拼装创建菜单的url
        String url = menu_delete_url + getAccessTokenStr(appId);
        LogUtils.error("deleteMenu url为:" + url);
        // 调用接口创建菜单
        String result = HttpUtils.get(url);
        LogUtils.error("deleteMenu get返回值为：" + result);
        if (StringUtils.isBlank(result)) {
            LogUtils.error("deleteMenu请求异常，返回值为null");
            return false;
        }
        // 解析请求数据
        JSONObject resultJson = JSONObject.parseObject(result);
        LogUtils.error("deleteMenu 解析resultJson成功!");
        if (resultJson != null) {
            if (StringUtils.isNotBlank(resultJson.getString("errcode"))) {
                if (resultJson.getString("errcode").equals("0")) {
                    LogUtils.error("菜单删除成功！");
                    return true;
                } else {
                    String errorStr = "菜单删除失败：errcode=" + resultJson.getString("errcode");
                    if (StringUtils.isNotBlank(resultJson.getString("errmsg"))) {
                        errorStr += " errmsg=" + resultJson.getString("errmsg");
                    }
                    LogUtils.error(errorStr);
                    return false;
                }
            }
        }
        LogUtils.error("菜单创建失败 : resultJson为null");
        return false;
    }

    /**
     * 
     * @Title: createMenu @Description: 创建菜单 @param @param menu @param @param appId @param @return 设定文件 @return Boolean
     * 返回类型 @throws
     */
    public static Boolean createMenu(Menu menu, String appId) {
        LogUtils.error("进入sdk，创建自定义菜单，参数appId为:" + appId);
        // 拼装创建菜单的url
        String url = menu_create_url + getAccessTokenStr(appId);
        LogUtils.error("createMenu url为:" + url);
        // 将菜单对象转换成json字符串
        String jsonMenu = JSONObject.toJSONString(menu);
        LogUtils.error("jsonMenu:" + jsonMenu);
        // 调用接口创建菜单
        String result = HttpUtils.post(url, jsonMenu);
        LogUtils.error("createMenu post返回值为：" + result);
        if (StringUtils.isBlank(result)) {
            LogUtils.error("createMenu HttpUtils.post：请求异常，返回值为null");
            return false;
        }
        // 解析请求数据
        JSONObject resultJson = JSONObject.parseObject(result);
        LogUtils.error("createMenu 解析resultJson成功");
        if (resultJson != null) {
            if (org.apache.commons.lang.StringUtils.isNotBlank(resultJson.getString("errcode"))) {
                if (resultJson.getString("errcode").equals("0")) {
                    LogUtils.error("菜单创建成功！");
                    return true;
                } else {
                    String errorStr = "菜单创建失败：errcode=" + resultJson.getString("errcode");
                    if (StringUtils.isNotBlank(resultJson.getString("errmsg"))) {
                        errorStr += " errmsg=" + resultJson.getString("errmsg");
                    }
                    LogUtils.error(errorStr);
                    return false;
                }
            }
        }
        LogUtils.error("菜单创建失败 : resultJson为null");
        return false;
    }
    
    public static Boolean createMenuForTest(Menu menu, String accessToken) {
        // 拼装创建菜单的url
        String url = menu_create_url + accessToken;
        LogUtils.error("createMenu url为:" + url);
        // 将菜单对象转换成json字符串
        String jsonMenu = JSONObject.toJSONString(menu);
        LogUtils.error("jsonMenu:" + jsonMenu);
        // 调用接口创建菜单
        String result = HttpUtils.post(url, jsonMenu);
        LogUtils.error("createMenu post返回值为：" + result);
        if (StringUtils.isBlank(result)) {
            LogUtils.error("createMenu HttpUtils.post：请求异常，返回值为null");
            return false;
        }
        // 解析请求数据
        JSONObject resultJson = JSONObject.parseObject(result);
        LogUtils.error("createMenu 解析resultJson成功");
        if (resultJson != null) {
            if (org.apache.commons.lang.StringUtils.isNotBlank(resultJson.getString("errcode"))) {
                if (resultJson.getString("errcode").equals("0")) {
                    LogUtils.error("菜单创建成功！");
                    return true;
                } else {
                    String errorStr = "菜单创建失败：errcode=" + resultJson.getString("errcode");
                    if (StringUtils.isNotBlank(resultJson.getString("errmsg"))) {
                        errorStr += " errmsg=" + resultJson.getString("errmsg");
                    }
                    LogUtils.error(errorStr);
                    return false;
                }
            }
        }
        LogUtils.error("菜单创建失败 : resultJson为null");
        return false;
    }
    
    public static Boolean deleteMenuForTest(String accessToken) {
        // 拼装创建菜单的url
        String url = menu_delete_url + accessToken;
        LogUtils.error("deleteMenu url为:" + url);
        // 调用接口创建菜单
        String result = HttpUtils.get(url);
        LogUtils.error("deleteMenu get返回值为：" + result);
        if (StringUtils.isBlank(result)) {
            LogUtils.error("deleteMenu请求异常，返回值为null");
            return false;
        }
        // 解析请求数据
        JSONObject resultJson = JSONObject.parseObject(result);
        LogUtils.error("deleteMenu 解析resultJson成功!");
        if (resultJson != null) {
            if (StringUtils.isNotBlank(resultJson.getString("errcode"))) {
                if (resultJson.getString("errcode").equals("0")) {
                    LogUtils.error("菜单删除成功！");
                    return true;
                } else {
                    String errorStr = "菜单删除失败：errcode=" + resultJson.getString("errcode");
                    if (StringUtils.isNotBlank(resultJson.getString("errmsg"))) {
                        errorStr += " errmsg=" + resultJson.getString("errmsg");
                    }
                    LogUtils.error(errorStr);
                    return false;
                }
            }
        }
        LogUtils.error("菜单创建失败 : resultJson为null");
        return false;
    }

}
